Shadowsocks
Протокол Shadowsocks, совместимый с большинством других реализаций.
Текущая совместимость:
- Поддерживается пересылка TCP- и UDP-пакетов, при этом UDP можно при необходимости отключить.
- Рекомендуемые методы шифрования:
- 2022-blake3-aes-128-gcm
- 2022-blake3-aes-256-gcm
- 2022-blake3-chacha20-poly1305
- Другие методы шифрования:
- aes-256-gcm
- aes-128-gcm
- chacha20-poly1305 или chacha20-ietf-poly1305
- xchacha20-poly1305 или xchacha20-ietf-poly1305
- none или plain
Новый формат протокола Shadowsocks 2022 повышает производительность и обеспечивает полноценную защиту от повторов, устраняя следующие проблемы безопасности старого протокола:
- Серьезные уязвимости в конструкции AEAD-шифрования Shadowsocks, не позволяющие гарантировать надежность связи
- Рост частоты ложных срабатываний исходного TCP-фильтра повторов со временем
- Отсутствие защиты от повторов для UDP
- Поведение TCP, которое может использоваться для активного зондирования
DANGER
При использовании метода шифрования "none" трафик передается в открытом виде. В целях безопасности не используйте этот метод в публичных сетях.
InboundConfigurationObject
InboundConfigurationObject соответствует элементу settings в InboundObject.
{
"inbounds": [
{
// ...
"protocol": "shadowsocks",
"settings": {
"network": "tcp,udp",
"method": "aes-256-gcm",
"password": "114514",
"level": 0,
"email": "love@xray.com",
"users": [
{
"password": "1919810",
"method": "aes-128-gcm"
}
]
}
}
]
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
network: "tcp" | "udp" | "tcp,udp"
Тип сети, которую прослушивает серверный порт. Значение по умолчанию: "tcp".
Обратите внимание, что этот параметр относится только к прослушиванию; он в основном влияет на встроенную передачу UDP в Shadowsocks и управляет ею. Значение "tcp" не означает, что inbound отклонит UDP-прокси-запросы. Такие запросы все еще могут быть упакованы в TCP средствами Shadowsocks outbound, например через UoT или mux.cool, и отправлены на сервер; этот параметр их не контролирует.
method: string
Метод шифрования. Список вариантов приведен выше.
password: string
Обязательный параметр.
Shadowsocks 2022
В качестве пароля используется предварительно согласованный ключ, аналогичный WireGuard.
Используйте
openssl rand -base64 <длина>для генерации ключа, совместимого с shadowsocks-rust; длина зависит от выбранного метода шифрования.Метод шифрования Длина ключа 2022-blake3-aes-128-gcm 16 2022-blake3-aes-256-gcm 32 2022-blake3-chacha20-poly1305 32 В реализации на Go 32-байтовые ключи работают всегда.
Другие методы шифрования
Подходит любая строка. Длина пароля не ограничена, но короткие пароли легче подобрать, поэтому рекомендуется использовать пароль длиной не менее 16 символов.
level: number
Уровень пользователя. Для соединения будет использоваться локальная политика, соответствующая этому уровню пользователя. Значение level соответствует значению level в разделе policy. Если не указано, по умолчанию используется 0.
Адрес электронной почты пользователя, используемый для различения трафика разных пользователей (журналы, статистика).
users: [ UserObject ]
Массив, представляющий группу пользователей, распознаваемых сервером.
Каждый элемент массива является UserObject.
Наличие этой опции означает, что включен многопользовательский режим.
UserObject
{
"password": "1919810",
"method": "aes-256-gcm",
"level": 0,
"email": "love@xray.com"
}2
3
4
5
6
method: string
Если
methodвInboundConfigurationObjectне относится к SS2022, здесь можно указать"method"для каждого пользователя (в"method"также поддерживаются только не-SS2022 варианты) вместе с"password"; при этом"password", заданный вInboundConfigurationObject, будет проигнорирован.Если
methodвInboundConfigurationObjectотносится к SS2022, из соображений безопасности больше не поддерживается установка"method"для отдельных пользователей. Используется единый"method", указанный вInboundConfigurationObject.
password: string
Обратите внимание: SS2022, в отличие от старого SS, не игнорирует верхнеуровневый "password". Правильный формат пароля на клиенте: ServerPassword:UserPassword. Например: "password": "114514:1919810"
Остальные опции
Имеют то же значение, что и в InboundConfigurationObject.